//
//  Problem890.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/22.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 890. 查找和替换模式
 你有一个单词列表 words 和一个模式  pattern，你想知道 words 中的哪些单词与模式匹配。

 如果存在字母的排列 p ，使得将模式中的每个字母 x 替换为 p(x) 之后，我们就得到了所需的单词，那么单词与模式是匹配的。

 （回想一下，字母的排列是从字母到字母的双射：每个字母映射到另一个字母，没有两个字母映射到同一个字母。）

 返回 words 中与给定模式匹配的单词列表。

 你可以按任何顺序返回答案。

 示例：
     输入：words = ["abc","deq","mee","aqq","dkd","ccc"], pattern = "abb"
     输出：["mee","aqq"]
     解释：
     "mee" 与模式匹配，因为存在排列 {a -> m, b -> e, ...}。
     "ccc" 与模式不匹配，因为 {a -> c, b -> c, ...} 不是排列。
     因为 a 和 b 映射到同一个字母。
 提示：
     1 <= words.length <= 50
     1 <= pattern.length = words[i].length <= 20
 */
@objcMembers class Problem890: NSObject {
    func solution() {
        print(findAndReplacePattern(["abc","deq","mee","aqq","dkd","ccc"], "abb"))
    }
    /*
     1: 创建一个数组 list[26] = false
     2: 遍历pattern，把p
     */
    func findAndReplacePattern(_ words: [String], _ pattern: String) -> [String] {
        var list: [String]  = []
        let charts = Array(pattern)
        for word in words {
            var dic:[Character: Character]  = [:]
            var isRight = true
            for (i, c) in word.enumerated() {
                if dic[charts[i]] == nil {
                    dic[charts[i]] = c
                } else if dic[charts[i]] != c {
                    isRight = false
                    break
                }
            }
            
            if isRight == true {
                list.append(word)
            }
        }
        
        return list
    }
}
